<?php
/*
 * @美潮风
 * @功能说明：短信封装层
 * @更新说明：暂无更新
 * @文件名 Message.class.php
 * @编码 UTF-8
 * @创建时间 2016-9-29 下午4:41:16
 * @创建人 yanyan
 */
namespace service\message;
//require SCRIPT_ROOT.'/../../library/yimei/include/Client.php';

/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/8/9
 * Time: 10:11
 */
class Message
{
    public  $_messageSn;

    public $_messagePwd;

    const MESSAGE_APIURL = 'sdk2.entinfo.cn';

    public function __construct()
    {
        $this->_messageSn = 'SDK-BBX-010-25120';
        $this->_messagePwd = strtoupper(md5('SDK-BBX-010-25120'.'3b55c08E'));
    }

    /*
     * @发送消息
     * @params $mobile 手机号
     * @params $content 消息内容
     * @params $type 0单个发送 1群发-消息类型，是群发还是单个发送
     */
    public function sendMessage($mobile,$content,$type=0) {
        //群发
        if($type && is_array($mobile)) {
            $mobileStr = $this->handlerMoble($mobile);

        }else{
            $mobileStr = trim($mobile);
        }

        if(!$content) {
            $this->error('消息内容为空！');
        }
        $data = $this->argvData($mobileStr,$content);
        $this->send($data);
    }

    /*
     * @数据发送
     */
    public function send($data) {
        if(!$data || !is_array($data)) {
            $this->error('发送内容错误');
        }
        //创建socket连接
        $fp = fsockopen(self::MESSAGE_APIURL,8061,$errno,$errstr,10) or exit($errstr."--->".$errno);
        //构造post请求的头
        $header = "POST /webservice.asmx/mdsmssend HTTP/1.1\r\n";
        $header .= "Host:".self::MESSAGE_APIURL."\r\n";
        $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
        $header .= "Content-Length: ".$data['length']."\r\n";
        $header .= "Connection: Close\r\n\r\n";
        //添加post的字符串
        $header .= $data['params']."\r\n";
        //发送post的数据
        fputs($fp,$header);
        $inheader = 1;
        while (!feof($fp)) {
            $line = fgets($fp,1024); //去除请求包的头只显示页面的返回数据
            if ($inheader && ($line == "\n" || $line == "\r\n")) {
                $inheader = 0;
            }
            if ($inheader == 0) {
                // echo $line;
            }
        }
        $line=str_replace("<string xmlns=\"http://tempuri.org/\">","",$line);
        $line=str_replace("</string>","",$line);
        $result=explode("-",$line);
        // echo $line."-------------";
        if(count($result)>1)
            echo '发送失败返回值为:'.$line.'。请查看webservice返回值对照表';
        else
            echo '发送成功 返回值为:'.$line;

    }
    /*
     * @发送数据整合
     */
    private function argvData($mobileStr,$content) {
        $argv = array(
            'sn'=>$this->_messageSn, //序列号
            'pwd'=>$this->_messagePwd, //此处密码需要加密 加密方式为 md5(sn+password) 32位大写
            'mobile'=>$mobileStr,//手机号 多个用英文的逗号隔开 post理论没有长度限制.推荐群发一次小于等于10000个手机号
            'content'=>$content,//iconv( "GB2312", "gb2312//IGNORE" ,'您好测试短信[XXX公司]'),//'您好测试,短信测试[签名]',//短信内容
            'ext'=>'',
            'stime'=>'', //定时时间 格式为2011-6-29 11:09:21
            'msgfmt'=>'',
            'rrid'=>''
        );
        $flag = 0; $params='';
        //构造要post的字符串
        foreach ($argv as $key=>$value) {
            if ($flag!=0) {
                $params .= "&";
                $flag = 1;
            }
            $params.= $key."="; $params.= urlencode($value);// urlencode($value);
            $flag = 1;
        }
        $length = strlen($params);
        return array('length'=>$length,'params'=>$params);
    }

    private function handlerMoble($mobile) {
        $mArray = implode(',',$mobile);
        return trim($mArray);
    }

    public function success($message) {
        return array(
            'status'=>1,
            'message'=>$message,
        );
    }

    public function error($message) {

        return array(
            'status'=>0,
            'message'=>$message,
        );
    }

}
?>